/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package projetofinal;

import java.sql.*;
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
import oracle.jdbc.pool.OracleDataSource;

/**
 *
 * @author Aluno
 */
public class BancoDados {
    
    private Connection con;
    private PreparedStatement ps;
    private Statement stmt;
    private ResultSet rs;

    public BancoDados() {
        setCon();
    }
    public void setCon() {
        // configura parâmetros de conexão ao BD Oracle
        String serverName = "192.168.3.2";
        //String serverName = "127.0.0.1";
        //servidor BD Oracle da FARGS
        //String serverName = "localhost";
        //ou máquina local
        //String serverName = "127.0.0.1";
        //ou endereço IP da máquina local
        String portNumber = "1521";
        //porta default do Oracle
        String sid = "XE";
        //nome para BD Oracle 10g XE
        String username = "projetofinal";
        //nome do usuário
        String password = "fargs";
        //senha
        String url = "jdbc:oracle:thin:"+username+"/"+password+"@"+serverName
        +":"+portNumber+":"+sid;
        //a String de conexão url, para um BD Oracle local, deve ser, por exemplo:
        //"jdbc:oracle:thin:projetofinal/fargs@127.0.0.1:1521:XE";
        try
        {
            // verifica se precisa abrir a conexão com o BD
            if (con == null)
            {
                // cria uma instância da classe OracleDataSource e seta a URL
                OracleDataSource ods = new OracleDataSource();
                ods.setURL(url);

                // conecta no BD
                System.out.println("Connecting to " + url + "\n");
                con = ods.getConnection ();
                System.out.println("Connected\n");

            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
            // msg de erro caso ocorra algum problema de conexão ao BD
            System.out.println(e.getMessage () + "\n");
        }

    }
    
    public ResultSet carregaCodigoClientes()
    {
        try
        {
            //seleciona todos os codigos da tabela clientes
            ps = con.prepareStatement("SELECT codigo FROM clientes");
            rs = ps.executeQuery();
        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna o resultado da consulta
        return rs;

    }
    
    public ResultSet pesquisaClientes(String vlCodigo, String vlNome)
    {
        try
        {
            //Cria a consulta conforme parâmetros enviados
            String sql = "SELECT * FROM clientes WHERE 1=1 ";
            if(!vlCodigo.equals("")){
                DecimalFormat quatroDigitos = new DecimalFormat("0000");
                String vlCodigoAux = quatroDigitos.format(Integer.parseInt(vlCodigo));
                sql += "AND codigo = '" + vlCodigoAux + "' ";
            }
            if(!vlNome.equals("")){
                sql += "AND UPPER(nome) LIKE UPPER('%" + vlNome + "%') ";
            }
            //seleciona todos os campos da tabela cliente
            //onde codigo = valorCodigo
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna resultado da consulta
        return rs;
    }
    
    public ResultSet consultaCamposClientes(String valorCodigo)
    {
        try
        {
            //seleciona todos os campos da tabela cliente
            //onde codigo = valorCodigo
            ps = con.prepareStatement("SELECT * FROM clientes WHERE codigo=?");
            ps.setString(1, valorCodigo);
            rs = ps.executeQuery();
        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna resultado da consulta
        return rs;
    }
    
    public int insereClientes(String nome, String end, int cod_est_civil, String sexo,
    boolean areas1, boolean areas2, boolean areas3)
    {
        int resultado=0;
        int auxCodigo=0;
        try
        {
            //prepara valor para código:pega o maior código e soma 1
            ps = con.prepareStatement("select max(codigo) from clientes");
            rs = ps.executeQuery();

            while (rs.next())
            {
                auxCodigo = (int) rs.getInt(1);
            }
            auxCodigo++;
            //prepara formatação de 4 dígitos para código
            DecimalFormat quatroDigitos = new DecimalFormat("0000");
            String strAux = quatroDigitos.format(auxCodigo);
            //prepara valor para sexo
            String sqlInsert =
            "INSERT INTO clientes (" +
            "codigo, nome, endereco, cod_est_civil," +
            "sexo, areas1, areas2, areas3" +
            ") VALUES (?,?,?,?,?,?,?,?)";
            ps = con.prepareStatement(sqlInsert);
            ps.setString(1, strAux);
            ps.setString(2, nome);
            ps.setString(3, end);
            ps.setInt(4, cod_est_civil);
            ps.setString(5, sexo);
            ps.setBoolean(6, areas1);
            ps.setBoolean(7, areas2);
            ps.setBoolean(8, areas3);
            //executa SQL insert
            resultado = ps.executeUpdate();

        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna resultado do insert
        if (resultado ==1){
            return auxCodigo;
        }else{
            return resultado;
        }
    }
    
    public int atualizaCliente(String codigo, String nome, String end, int cod_est_civil, String sexo,
    boolean areas1, boolean areas2, boolean areas3)
    {
        int resultado=0;
        try
        {
            //prepara valor para sexo
            String sqlInsert =
            "UPDATE clientes SET " 
            + "nome = ?, "
            + "endereco = ?, "
            + "cod_est_civil = ?, " 
            + "sexo = ?, "
            + "areas1 = ?, "
            + "areas2 = ?, "
            + "areas3 = ? "
            + "WHERE codigo = ?";
            ps = con.prepareStatement(sqlInsert);
            ps.setString(1, nome);
            ps.setString(2, end);
            ps.setInt(3, cod_est_civil);
            ps.setString(4, sexo);
            ps.setBoolean(5, areas1);
            ps.setBoolean(6, areas2);
            ps.setBoolean(7, areas3);
            ps.setString(8, codigo);
            //executa SQL insert
            resultado = ps.executeUpdate();

        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna resultado do insert
        if (resultado ==1){
            return resultado;
        }else{
            return 0;
        }
    }
    
    public int deletaCliente(String codigo)
    {
        int resultado=0;
        try
        {
            //prepara valor para sexo
            String sqlInsert =
            "DELETE FROM clientes WHERE codigo = ?";
            ps = con.prepareStatement(sqlInsert);
            ps.setString(1, codigo);
            //executa SQL insert
            resultado = ps.executeUpdate();

        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna resultado do insert
        if (resultado ==1){
            return resultado;
        }else{
            return 0;
        }
    }

    public ResultSet pesquisaFuncionarios(String vlCodigo, String vlNome) {
        try
        {
            //Cria a consulta conforme parâmetros enviados
            String sql = "SELECT * FROM funcionarios WHERE 1=1 ";
            if(!vlCodigo.equals("")){
                DecimalFormat quatroDigitos = new DecimalFormat("0000");
                String vlCodigoAux = quatroDigitos.format(Integer.parseInt(vlCodigo));
                sql += "AND codigo = '" + vlCodigoAux + "' ";
            }
            if(!vlNome.equals("")){
                sql += "AND UPPER(nome) LIKE UPPER('%" + vlNome + "%') ";
            }
            //seleciona todos os campos da tabela cliente
            //onde codigo = valorCodigo
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna resultado da consulta
        return rs;
    }

    public int atualizaFuncionario(String nome, String cpf, String sexo, int cod_cargo, double salario, int ferias, String codigo) {
        int resultado=0;
        try
        {
            //prepara valor para sexo
            String sqlInsert =
            "UPDATE funcionarios SET " 
            + "nome = ?, "
            + "cpf = ?, "
            + "sexo = ?, " 
            + "cod_cargo = ?, "
            + "salario = ?, "
            + "ferias = ? "
            + "WHERE codigo = ?";
            ps = con.prepareStatement(sqlInsert);
            ps.setString(1, nome);
            ps.setString(2, cpf);
            ps.setString(3, sexo);
            ps.setInt(4, cod_cargo);
            ps.setDouble(5, salario);
            ps.setInt(6, ferias);
            ps.setString(7, codigo);
            //executa SQL insert
            resultado = ps.executeUpdate();

        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna resultado do insert
        if (resultado ==1){
            return resultado;
        }else{
            return 0;
        }
    }

    int insereFuncionarios(String nome, String cpf,String sexo, int cod_cargo, double salario, int ferias) {
        int resultado=0;
        int auxCodigo=0;
        try
        {
            //prepara valor para código:pega o maior código e soma 1
            ps = con.prepareStatement("select max(codigo) from funcionarios");
            rs = ps.executeQuery();

            while (rs.next())
            {
                auxCodigo = (int) rs.getInt(1);
            }
            auxCodigo++;
            //prepara formatação de 4 dígitos para código
            DecimalFormat quatroDigitos = new DecimalFormat("0000");
            String strAux = quatroDigitos.format(auxCodigo);
            //prepara valor para sexo
            String sqlInsert =
            "INSERT INTO funcionarios (" +
            "codigo, nome, cpf, sexo," +
            "cod_cargo, salario, ferias" +
            ") VALUES (?,?,?,?,?,?,?)";
            ps = con.prepareStatement(sqlInsert);
            ps.setString(1, strAux);
            ps.setString(2, nome);
            ps.setString(3, cpf);
            ps.setString(4, sexo);
            ps.setInt(5, cod_cargo);
            ps.setDouble(6, salario);
            ps.setInt(7, ferias);
            //executa SQL insert
            resultado = ps.executeUpdate();

        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna resultado do insert
        if (resultado ==1){
            return auxCodigo;
        }else{
            return resultado;
        }
    }

    int deletaFuncionario(String codigo) {
        int resultado=0;
        try
        {
            //prepara valor para sexo
            String sqlInsert =
            "DELETE FROM funcionarios WHERE codigo = ?";
            ps = con.prepareStatement(sqlInsert);
            ps.setString(1, codigo);
            //executa SQL insert
            resultado = ps.executeUpdate();

        }//fim do try
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(
            null, sqlex.toString(), "Aviso",
            JOptionPane.WARNING_MESSAGE);
            //sqlex.printStackTrace( );
        }
        //retorna resultado do insert
        if (resultado ==1){
            return resultado;
        }else{
            return 0;
        }
    }
    
}
